////////////////////////////////////////////////////////////////////////////////
/*! \file
 * \brief This file has defines the stub implementation of the timemanager
 *
 *
 *
 * \author Ivo Wingelaar
 * \date 2011
 * \version 0.0.1
 * \copyright GNU Lesser General Public License v3
 */
////////////////////////////////////////////////////////////////////////////////

#ifndef __LYNX_TIME_MANAGER_STUB_C_HPP_INCLUDED__
#define __LYNX_TIME_MANAGER_STUB_C_HPP_INCLUDED__

////////////////////////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////////////////////////
#include "LynxTimeManager.hpp"

namespace Lynx
{

////////////////////////////////////////////////////////////////////////////////
//! A stub implementation of the TimeManager
class TimeManagerStub_C : public TimeManager
{
public:
    ////////////////////////////////////////////////////////////////////////////
    //! Default constructor.
    TimeManagerStub_C();

    ////////////////////////////////////////////////////////////////////////////
    //! Virtual destructor.
    virtual ~TimeManagerStub_C();

    ////////////////////////////////////////////////////////////////////////////
    //! Initializes the timer.
    virtual void init_timer(void) = 0;

    ////////////////////////////////////////////////////////////////////////////
    //! Initializes the virtual timer.
    virtual void init_virtual_timer(void);

    ////////////////////////////////////////////////////////////////////////////
    //! Returns virtual time.
    virtual uint32_t get_virtual_time(void) const;

    ////////////////////////////////////////////////////////////////////////////
    //! Sets the virtual time.
    virtual void set_virtual_time(uint32_t time);

    ////////////////////////////////////////////////////////////////////////////
    //! Returns the speed value of the virtual clock.
    virtual float get_virtual_speed(void) const;

    ////////////////////////////////////////////////////////////////////////////
    //! Sets the speed of the virtual clock.
    virtual void set_virtual_speed(float speed = 1.0f);

    ////////////////////////////////////////////////////////////////////////////
    //! Stops the virtual clock.
    virtual void stop_virtual_clock(void);

    ////////////////////////////////////////////////////////////////////////////
    //! Starts the virtual clock.
    virtual void start_virtual_clock(void);

    ////////////////////////////////////////////////////////////////////////////
    //! Returns if the clock if currently stopped.
    virtual bool is_virtual_clock_stopped(void) const;

    ////////////////////////////////////////////////////////////////////////////
    //! Increment the clock to reflect any changes.
    void tick(void);

private:
    ////////////////////////////////////////////////////////////////////////////
    // Member data
    ////////////////////////////////////////////////////////////////////////////

    float mVirtualTimerSpeed;         ///< The virtual clock speed multiplier.
    int32_t mVirtualTimerStopCounter; ///< The virtual reference counter.
    uint32_t mLastVirtualTime;        ///< The last virtual time.
    uint32_t mStartRealTime;          ///< The start of the real timer.
    uint32_t mStaticTime;             ///< The current real time.
    uint32_t mLastStaticTime;         ///< The last real time.
};

} // namespace Lynx

#endif // __LYNX_TIME_MANAGER_STUB_C_HPP_INCLUDED__

